# _*_ coding: UTF-8 _*_
# @Time     : 2021/2/24 下午 03:02
# @Author   : Li Jie
# @Site     : http://www.hzdledu.com/
# @File     : thread_test4.py
# @Software : PyCharm

from threading import Thread, Lock, current_thread
import time

# 用多线程和互斥锁实现多人同时订购电影票，假设电影院某场电影有100张电影票，10个用户同时抢购，每售出一张，显示一次剩余的电影票数

tickets = 100  # 一共100张票


def buy():
    global tickets
    mutex.acquire()  # 锁定
    n = tickets  # 赋值给临时变量
    time.sleep(1)  # 休眠一秒
    tickets = n - 1  # 票数-1
    print(f'用户:{current_thread().name}抢到一张票，还剩{tickets}张票')  # 打印信息
    mutex.release()  # 释放锁


def thread_main():
    print(f'-------主线程开始-------')
    global mutex  # 将互斥锁设为全局
    mutex = Lock()  # 创建互斥锁
    users_threads = [Thread(target=buy) for i in range(10)]  # 创建10个子线程
    for user_thread in users_threads:
        user_thread.start()  # 启动子线程
    for user_thread in users_threads:
        user_thread.join()  # 等待线程结束
    print(f'-------主线程结束-------')


if __name__ == '__main__':
    thread_main()
